const { DataTypes, Sequelize } = require('sequelize');
const moment = require('moment'); // 引入 moment 库
const sequelize = require("@/db/seq");

// const sequelize = require('@/db/seq'); // 引入 sequelize 实例

// 定义文章模型

const Article = sequelize.define('blog_article', {
  title: {
    type: DataTypes.STRING, // VARCHAR(255)
    allowNull: false,
    comment: '名称，唯一', // 添加字段描述
  },
  author_id: {
    type: DataTypes.INTEGER, // INT(11)
    allowNull: false,
    comment: '作者id',
  },
  type_id: {
    type: DataTypes.INTEGER, // INT(11)
    allowNull: false,
    comment: '分类id',
  },
  description: {
    type: DataTypes.STRING, // VARCHAR(255)
    allowNull: false,
    comment: '文章描述',
  },
  content: {
    type: DataTypes.TEXT, // TEXT
    allowNull: false,
    comment: '内容',
  },
  cover: {
    type: DataTypes.STRING, // VARCHAR(255)
    comment: '文章封面',
  },
  is_top: {
    type: DataTypes.BOOLEAN, // TINYINT(1)
    defaultValue: false, // 默认值为 false
    comment: '是否置顶',
  },
  order: {
    type: DataTypes.INTEGER, // INT(11)
    defaultValue: 0, // 默认值为 0
    comment: '排序',
  },
  // update_user: {
  //   type: DataTypes.INTEGER, // INT(11)
  //   comment: '更新人',
  // },
  status: {
    type: DataTypes.ENUM('draft', 'published', 'deleted'), // 枚举类型
    defaultValue: 'draft', // 默认值为 草稿
    comment: '状态，草稿，已发布，已删除',
  },
  type: {
    type: DataTypes.ENUM('article', 'video', 'audio'), // 枚举类型
    defaultValue: 'article', // 默认值为 文章
    comment: '类型，文章，视频，音频',
  },
  original_url: {
    type: DataTypes.STRING, // VARCHAR(255)
    defaultValue: '',
    comment: '原文链接',
  },
  view_times: {
    type: DataTypes.INTEGER, // INT(11)
    defaultValue: 0, // 默认值为 0
    comment: '浏览次数',
  },
  thumb_up: {
    type: DataTypes.INTEGER, // INT(11)
    defaultValue: 0, // 默认值为 0
    comment: '点赞次数',
  },
  reading_time: {
    type: DataTypes.INTEGER, // INT(11)
    defaultValue: 0, // 默认值为 0
    comment: '阅读时间',
  },
  createdAt: {
    type: DataTypes.DATE, // DATETIME
    defaultValue: Sequelize.NOW, // 默认值为当前时间
    get() { // 自定义 getter 方法
      // 获取当前实例的 createdAt 字段值
      const createdAt = this.getDataValue('createdAt');
      return moment(createdAt).format('YYYY-MM-DD HH:mm:ss'); // 格式化时间
    },
    comment: '创建时间',
  },
  updatedAt: {
    type: DataTypes.DATE, // DATETIME
    defaultValue: Sequelize.NOW, // 默认值为当前时间
    comment: '更新时间',
    get() { // 自定义 getter 方法
      // 获取当前实例的 updatedAt 字段值
      const updatedAt = this.getDataValue('updatedAt');
      return moment(updatedAt).format('YYYY-MM-DD HH:mm:ss'); // 格式化时间
    },
  },
},
  {
    freezeTableName: true, // 禁用表名复数
  }
)

Article.associate = (models) => {
  Article.belongsToMany(models.blog_tag, {
    through: 'blog_article_tag',
    foreignKey: 'article_id',
    otherKey: 'tag_id',
    as: 'tags'
  });
  Article.belongsTo(models.dictionary_items, {
    foreignKey: 'category_id',
    as: 'article_category'
  });
  Article.belongsTo(models.blog_user, {
    foreignKey: 'author_id',
    as: 'article_author'
  });
  Article.belongsTo(models.article_types, {
    foreignKey: 'type_id',
    as: 'article_type'
  });

};
module.exports = Article;